<?php

// 商品分类 类

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Session;
use App\Http\Controllers\Admin\ComController;

class CategoryController extends Controller
{
    // 分类列表 页
	public function index(Request $request)
	{
		// 获取搜索内容
		$keyword = $request->input('keyword',"");
		if( empty($keyword) ){
			// 为空 说明没有搜索
			$one = 'id';
			$two = '!=';
			$three = '0';
		}else{
			// 是分类名
			$one = 'name';
			$two = 'like';
			$three = '%'.$keyword.'%';
		}
		// 查询所有分类 每页20条数据
		$category = DB::table('category')
					-> where( $one,$two,$three ) 
					// 原生sql
					->orderBy( DB::raw("concat( path,id,'-' )") ) 
					->paginate(30);
		// 空格数组
		$blank = array();
		foreach( $category as $key=>$category_info ){
			// 数出有几个 '-'
			$num=substr_count( $category_info->path,'-' );
			if( ($num-1)>0 ){
				// 分类的空格 便于展示层级关系
				$blank[$key]=str_repeat("&nbsp;",($num-1)*6) .'|--';
				
			}
		}
		return view( 'Admin.category.list',[ 'category'=>$category,'blank'=>$blank,'request'=>$keyword ] );
	}
	
	// 获取所有一级分类 写成公共的方法 方便调用
	public static function getFirstAll(){
		$all_first_category = DB::table('category')
									// 0 一级
									->where('pid','=','0')
									// ->orderBy('id','desc')
									->orderBy('sort','desc')
									->get();
		return $all_first_category;
	}
	
	// 创建 编辑 分类 页
	public function create( $category_id='' )
	{
		// 获取所有一级分类
		$all_first_category = $this::getFirstAll();
		if( $category_id=='' )
		{
			// 创建页面
			return view('Admin.category.add',['all_first_category'=>$all_first_category]);
		}else
		{
			// 分类 信息
			$c_info = DB::table('category')
								->where('id','=',$category_id)
								->first();
			// 分类 完整路径
			$category_path = ComController::getPath( $category_id );	
			// 编辑页面
			return view("Admin.category.add",['all_first_category'=>$all_first_category,'category_path'=>$category_path,'c_info'=>$c_info ] );
		}
		
	}
	
	// 用于 分类 创建 编辑
	// 用于 商品 创建 编辑
	// 获取父类相对应的子类列表
	public function getSonCategory( Request $request )
	{
		$data = $request -> except('_token');
		// 页面当前选择的分类 被称为 父类id
		$category_id = $data['category_id'];			
		// 为新select设置 新的id值
		$new_id		 = $data['new_id'];				
		
		$son_category = DB::table('category')
						->where('pid','=',$category_id )
						->get();
		
		// 准备要进行返回的html
		$html="";

		$total = count($son_category) - 1 ;
		foreach( $son_category as $key=>$category_info ){
			// 第一次加头部
			if( $key == 0 )
			{
				$html ="<select name='{$new_id}' class='form-control' id='{$new_id}' style='width:auto;float:left;margin-left:9px;' onchange=\"getSonCategory('".$new_id."')\" >";
				$html.="<option value='-1' >当前分类下</option>";
				$html .= "<option value='".$category_info->id."' >".$category_info->name."</option>";
				
			}
			// 最后一次加尾部
			else if( $key == $total )
			{
				$html .= "<option value='".$category_info->id."' >".$category_info->name."</option>";
				$html .= "</select>";
			}
			// 加中间部分
			else
			{
				$html .= "<option value='".$category_info->id."' >".$category_info->name."</option>";
			}
		}
			
		exit($html);
	}
	
	// 执行 创建 编辑 分类
	public function doCreate( $c_id='',Request $request)
	{
		$data = $request -> except('_token');
		// 清除无效值 下标0的值是 null
		unset($data['category'][0]);
		
		// 创建分类		
		if( empty($c_id) )
		{
			// 0 代表要创建根类 
			if( $data['category'][1]=='0' ){		
				$data['pid'] = "0";
				$data['path'] = "0-";
			}else{
				$path='';
				foreach( $data['category'] as $key=>$category_id ){
					if( $category_id != '-1' ){
						// path
						$path.=$category_id.'-';
						// 取循环的最后一次 就是父ID
						$data['pid']=$category_id;
					}
				}
				$data['path']='0-'.$path;
			}
		}
		
		// 分类名称 验证 
		$name_length=mb_strlen( $data['name'],'utf-8' );
		if( $name_length<1 ){
			$this->show_msg('分类名不能为空');
		}
		if( $name_length>20 ){
			$this->show_msg('分类名字数被限制在20个字符内');
		}
		unset($data['category']);
		if( !empty($c_id) ){
			// 编辑 
			// 1.主表
			$res= DB::table('category')
					->where('id','=',$c_id)
					->update($data);
			if( $res ){
				$this->show_msg('修改成功');
			}else{
				$this->show_msg('无任何修改,编辑失败');
			}
		}else{
			// 创建
			$data['create_time']=date("Y-m-d H:i:s",time());
			$data['admin_id']=Session::get('admin_id');
			// 1.主表
			$insert_id= DB::table('category')->insertGetId($data);
			if( $insert_id ){
				$this->show_msg('分类创建成功');
			}else{
				$this->show_msg('创建失败');
			}
		}
	}
	
	
	
}
